class StudentGradeManager:
    def __init__(self):
        self.courses = {}  # 存储课程和学生成绩
    
    def record_grade(self):
        """记录学生成绩"""
        print("\n===== 记录学生成绩 =====")
        name = input("请输入学生姓名：").strip()
        
        while True:
            student_id = input("请输入学生学号：").strip()
            if not student_id:
                print("学号不能为空，请重新输入！")
                continue
            break
        
        course_name = input("请输入课程名称：").strip()
        if not course_name:
            print("课程名称不能为空！")
            return
        
        while True:
            try:
                score = float(input("请输入成绩（0-100）："))
                if 0 <= score <= 100:
                    break
                else:
                    print("成绩必须在0-100之间，请重新输入！")
            except ValueError:
                print("输入无效，请输入有效的数字！")
        
        if course_name not in self.courses:
            self.courses[course_name] = {}
        
        if student_id in self.courses[course_name]:
            print(f"警告：学号 {student_id} 在课程 {course_name} 中已存在，将覆盖原有成绩！")
        
        self.courses[course_name][student_id] = (name, score)
        print("成绩已成功记录！")
    
    def query_grades(self):
        """查询学生成绩"""
        print("\n===== 查询学生成绩 =====")
        print("请选择查询方式：")
        print("1. 按学生姓名查询")
        print("2. 按学生学号查询")
        print("3. 按课程名称查询")
        
        while True:
            try:
                choice = int(input("请输入选项序号："))
                if 1 <= choice <= 3:
                    break
                else:
                    print("无效的选项，请输入1-3之间的数字！")
            except ValueError:
                print("输入无效，请输入有效的数字！")
        
        if choice == 1:  # 按姓名查询
            name = input("请输入学生姓名：").strip()
            found = False
            for course, students in self.courses.items():
                for student_id, (student_name, score) in students.items():
                    if student_name == name:
                        print(f"课程：{course}, 学号：{student_id}, 成绩：{score}")
                        found = True
            if not found:
                print(f"未找到姓名为 {name} 的学生记录！")
        
        elif choice == 2:  # 按学号查询
            student_id = input("请输入学生学号：").strip()
            found = False
            for course, students in self.courses.items():
                if student_id in students:
                    name, score = students[student_id]
                    print(f"课程：{course}, 姓名：{name}, 成绩：{score}")
                    found = True
            if not found:
                print(f"未找到学号为 {student_id} 的学生记录！")
        
        elif choice == 3:  # 按课程查询
            course_name = input("请输入课程名称：").strip()
            if course_name in self.courses:
                print(f"\n课程：{course_name}")
                for student_id, (name, score) in self.courses[course_name].items():
                    print(f"学号：{student_id}, 姓名：{name}, 成绩：{score}")
            else:
                print(f"未找到课程 {course_name} 的记录！")
    
    def statistics_grades(self):
        """统计课程成绩"""
        print("\n===== 统计课程成绩 =====")
        course_name = input("请输入课程名称：").strip()
        
        if course_name in self.courses:
            scores = [score for _, score in self.courses[course_name].values()]
            if scores:
                avg_score = sum(scores) / len(scores)
                max_score = max(scores)
                min_score = min(scores)
                
                print(f"\n课程：{course_name}")
                print(f"平均分：{avg_score:.2f}")
                print(f"最高分：{max_score:.1f}")
                print(f"最低分：{min_score:.1f}")
            else:
                print(f"课程 {course_name} 中没有成绩记录！")
        else:
            print(f"未找到课程 {course_name} 的记录！")
    
    def display_menu(self):
        """显示主菜单"""
        print("\n" + "="*33)
        print("欢迎使用学生成绩管理系统")
        print("="*33)
        print("请选择操作：")
        print("1. 记录学生成绩")
        print("2. 查询学生成绩")
        print("3. 统计课程成绩")
        print("4. 退出系统")
    
    def run(self):
        """运行系统主循环"""
        while True:
            self.display_menu()
            try:
                choice = int(input("\n请输入选项序号："))
                if choice == 1:
                    self.record_grade()
                elif choice == 2:
                    self.query_grades()
                elif choice == 3:
                    self.statistics_grades()
                elif choice == 4:
                    print("\n感谢使用学生成绩管理系统，再见！")
                    break
                else:
                    print("无效的选项，请输入1-4之间的数字！")
            except ValueError:
                print("输入无效，请输入有效的数字！")

if __name__ == "__main__":
    manager = StudentGradeManager()
    manager.run()